#pragma once
#include "Objects.h"
#include "VectorOperations.h"
#include "Quaternion.h"
#include "Global.h"

#ifndef CAM_FPS
#define CAM_FPS 0
#endif
#ifndef CAM_OVR
#define CAM_OVR 1
#endif
#ifndef CAM_FREE
#define CAM_FREE 2
#endif
#ifndef CAM_FLW
#define CAM_FLW 3
#endif

class Camera
{
public:
    Camera(void);
    ~Camera(void);

    Vector3f position, lastPos, direction, pointOfFocus, up, right;

    void SetMode(int _mode);
    void SetFocus(Vector3f point);
    void SetPosition(Vector3f point);
    void MoveFocus(float speed, Vector3f &axis);
    void MoveCamera(float speed, struct _Movement &m, Objects *player);
    void handleMouseMove(int mouseX, int mouseY, struct _GameStateInfo &info);
    void handleMouseMove(int mouseX, int mouseY, struct _GameStateInfo &info, Objects * player); // For Following Cameras

    void rotateY(float amount);
    void rotateX(float amount);
    void rotateZ(float amount);

    //Quaternion Orientation

    int mode;
    float xRot, lastRotX, lastRotY, yRot, zoom;
};
